package com.hb.B_面向对象.K_多态和拓展

/**
 * 拓展属性：
 *  与拓展函数类似，我们还能为一个类添加拓展属性。比如我们想给 MutableList 添加判断一个判断和
 *  是否为偶数的属性sumIsEven。
 *
 *  但是如果你准备给这个属性添加默认值，并且写出如下代码将会报错
 *
 *      //拓展属性不能有初始化器
        val MutableList<Int>.sumIsEven:Boolean=true
        get() = this.sum() %2 ==0
 *
 * 其实，与拓展函数一样，其本质也是对应Java中的静态方法(反编译之后，可以看到一个getSumIsEven的静态方法，
 * 与拓展函数类似)。由于拓展没有实际的将成员插入类中，因此对扩展属性来说幕后字段是无效的。这就是为什么拓展
 * 属性不能有初始化器的原因。他们的行为只能由显示提供getters和setters定义。
 */
fun main() {
    val list = mutableListOf<Int>(1, 2, 3)
    //true
    println(list.sumIsEven)

}
val MutableList<Int>.sumIsEven:Boolean
    get() = this.sum() %2 ==0